package com.itheima.common;

/**
 * 基于ThreadLocal封装工具类，用于保存和获取当前登录用户ID
 * 前端发送一个请求的时候，执行顺序为：拦截器-->controller-->自动填充
 * 在这个执行链中，线程只有一个，且是按顺序来的
 * 原理：
 *      ThreadLocal可以在线程中开辟一处空间，这个空间是一个Map
 *      存值的时候，默认会把当前线程id作为key，把需要存入的內容存入对应的value位置
 *      当需要的时候，调用get方法，会自动根据线程ID去取出对应的数据
 *      这个值只能在当前线程可用
 *
 * 注意：
 *      一个ThreadLocal只能存储一个值，因为它的key是固定的
 *      如果要存储多个值，则可以创建多个ThreadLocal对象
 * 
 * @author liuyiming
 * @date 2022-10-09 10:36
 * @version 1.0.0
 */
public class BaseContext {
    private static ThreadLocal<Long> threadLocal = new ThreadLocal<>();

    /**
     * <p>Description: 存放ID</p>
     *
     * @author liuyiming
     * @date 2022-10-09 10:39
     * @version 1.0.0
     */
    public static void setCurrentId(Long id){
        threadLocal.set(id);
    }

    /**
     * <p>Description: 获取id</p>
     *
     * @author liuyiming
     * @date 2022-10-09 11:23
     * @version 1.0.0
     */
    public static Long getCurrentId(){
        return threadLocal.get();
    }
}
